The Stream Control Transmission Protocol (SCTP) is a Transport Layer protocol, serving in a similar role as the popular protocols Transmission Control Protocol (TCP) and User Datagram Protocol (UDP). SCTP provides some of the same service features of both TCP and UDP, ensuring reliable, in-sequence transport of messages with congestion control. SCTP was defined by the Internet Engineering Task Force (IETF) Signaling Transport (SIGTRAN) in Request for Comments: 4960 (RFC 4960) “Stream Control Transmission Protocol,” September 2007, the contents of which are incorporated by reference herein.
SCTP is a reliable transport protocol operating on top of a connectionless packet network such as Internet Protocol (IP). Advantageously, SCTP offers the following services to its users: acknowledged error-free non-duplicated transfer of user data; data fragmentation to conform to discovered path maximum transmission unit (MTU) size; sequenced delivery of user messages within multiple streams, with an option for order-of-arrival delivery of individual user messages; optional bundling of multiple user messages into a single SCTP packet; and network-level fault tolerance through supporting of multi-homing at either or both ends of an association.
Whereas TCP is stream-oriented, i.e., transports byte streams, SCTP is transaction-oriented, meaning it transports data in one or more messages. A message is a group of bytes sent in one transaction (transmit operation). Although TCP correctly reorders data that arrives out of order, it is concerned only with bytes. TCP does not honor message boundaries, i.e., the structure of data in terms of their original transmission units at the sender. SCTP, in contrast, conserves message boundaries by operating on whole messages in a fashion similar to UDP. This means that a group of bytes that is sent in one transmission operation (transaction) is read exactly as that group, called message, at the receiver.
TCP provides both reliable data transfer and strict order-of-transmission delivery of data. Some applications need reliable transfer without sequence maintenance, while others would be satisfied with partial ordering of the data. In both of these cases, the head-of-line blocking offered by TCP causes unnecessary delay. The stream-oriented nature of TCP is often an inconvenience. Applications must add their own record marking to delineate their messages, and must make explicit use of the push facility to ensure that a complete message is transferred in a reasonable time. The limited scope of TCP sockets complicates the task of providing highly-available data transfer capability using multi-homed hosts. TCP is relatively vulnerable to denial-of-service attacks, such as SYN attacks.
In SCTP reliable data transfer between two end points is achieved by sending data on primary path which is decided as soon as the association is established. There is also an option of having a secondary path for a multi-homed host. In the current SCTP architecture, there is no mechanism to identify which path (primary or secondary) is more efficient (in terms of round trip time (RTT), Congestion Window (CWND), and other parameters). The SCTP packets continue to traverse the primary path until it goes down, even if there is a better secondary path available. Also, in the current scheme of SCTP the switchover from primary to secondary path is non-revertive.